]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dateMenu: Enforce calendar column width
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 24 Feb 2017 13:56:47 +0000 (14:56 +0100)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 27 Feb 2017 20:23:47 +0000 (21:23 +0100)
We want the width of the calendar column to be determined by the
calendar, other elements should adjust their allocation accordingly.
However neither ellipsization nor wrapping will kick in unless the
parent's width is restricted, so use a small custom layout manager
that enforces the desired behavior.

https://bugzilla.gnome.org/show_bug.cgi?id=754031

js/ui/dateMenu.js

index eab55b4c7a3ab7385bb8dd01f0053c5871ad6059..47b22a495b7a551e026ca633b8dbdc5ab288d3d1 100644 (file)
@@ -36,7 +36,7 @@ const TodayButton = new Lang.Class({
         // on the current date can be confusing. So don't make the button reactive
         // until the selected date changes.
         this.actor = new St.Button({ style_class: 'datemenu-today-button',
-                                     x_align: St.Align.START,
+                                     x_expand: true, x_align: St.Align.START,
                                      can_focus: true,
                                      reactive: false
                                    });
@@ -290,6 +290,22 @@ const FreezableBinLayout = new Lang.Class({
     }
 });
 
+const CalendarColumnLayout = new Lang.Class({
+    Name: 'CalendarColumnLayout',
+    Extends: Clutter.BoxLayout,
+
+    _init(actor) {
+        this.parent({ orientation: Clutter.Orientation.VERTICAL });
+        this._calActor = actor;
+    },
+
+    vfunc_get_preferred_width: function(container, forHeight) {
+        if (!this._calActor || this._calActor.get_parent() != container)
+            return this.parent(container, forHeight);
+        return this._calActor.get_preferred_width(forHeight);
+    }
+});
+
 const DateMenuButton = new Lang.Class({
     Name: 'DateMenuButton',
     Extends: PanelMenu.Button,
@@ -346,14 +362,16 @@ const DateMenuButton = new Lang.Class({
         hbox.add(this._messageList.actor, { expand: true, y_fill: false, y_align: St.Align.START });
 
         // Fill up the second column
-        vbox = new St.BoxLayout({ style_class: 'datemenu-calendar-column',
-                                  vertical: true });
+        let boxLayout = new CalendarColumnLayout(this._calendar.actor);
+        vbox = new St.Widget({ style_class: 'datemenu-calendar-column',
+                               layout_manager: boxLayout });
+        boxLayout.hookup_style(vbox);
         hbox.add(vbox);
 
         this._date = new TodayButton(this._calendar);
         vbox.add_actor(this._date.actor);
 
-        vbox.add(this._calendar.actor);
+        vbox.add_actor(this._calendar.actor);
 
         this._displaysSection = new St.ScrollView({ style_class: 'datemenu-displays-section vfade',
                                                     x_expand: true, x_fill: true,